package com.qdh;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Test;

import java.io.IOException;
import java.util.Arrays;

public class HDFSDemo {
    @Test
    public void test() throws IOException {
        //1. 初始化配置文件（设置hdfs入口）
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS", "hdfs://hadoop10:8020");
        //2.根据配置获取 HDFS文化系统对象
        FileSystem fileSystem = FileSystem.get(configuration);
        //3.调用api,操作 HDFS
        // hdfs dfs -put ...
        fileSystem.copyFromLocalFile(new Path("D:/b.txt"),new Path("/"));
        //4.释放资源
        if (fileSystem != null) {
            fileSystem.close();
        }
    }
    @Test
    public void test2() throws IOException {
        //1. 初始化配置文件
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS", "hdfs://hadoop10:8020");
        //2.根据配置获取 HDFS文化系统对象
        FileSystem fileSystem = FileSystem.get(configuration);

        //3.调用api,操作 HDFS
        // hdfs dfs -get ...
        //fileSystem.copyToLocalFile(new Path("/b.txt"), new Path("D:/"));
        // hdfs dfs -mkdir -p ...
        //boolean b = fileSystem.mkdirs(new Path("/xx/yy/zz"));
        //boolean b = fileSystem.exists(new Path("/xx/yy/zz"));
        // hdfs dfs -rm -r ...
        //true :表示递归删除，false时删文件夹会抛异常
         fileSystem.delete(new Path("/xx"),true);

        //4.删除资源
        if (fileSystem != null) {
            fileSystem.close();
        }
    }

    @Test
    public void test3() throws IOException {
        //1. 初始化配置文件（设置hdfs入口）
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS", "hdfs://hadoop10:8020");
        //2.根据配置获取 HDFS文化系统对象
        FileSystem fileSystem = FileSystem.get(configuration);
        //3.调用api,操作 HDFS
        FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/"));
        for (FileStatus fileStatus : fileStatuses) {
            System.out.println(fileStatus.getPath()); //获取路径
            System.out.println(fileStatus.getLen());//获取字节
        }

        //4.释放资源
        if (fileSystem != null) {
            fileSystem.close();
        }
    }

    @Test
    public void test4() throws IOException {
        //1. 初始化配置文件（设置hdfs入口）
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS", "hdfs://hadoop10:8020");
        //2.根据配置获取 HDFS文化系统对象
        FileSystem fileSystem = FileSystem.get(configuration);
        //3.调用api,操作 HDFS
        //递归获取
        RemoteIterator<LocatedFileStatus> listFiles = fileSystem.listFiles(new Path("/"), true);
        while (listFiles.hasNext()) {
            LocatedFileStatus file = listFiles.next();
            System.out.println(file.getPath());
            System.out.println(file.getLen());

            BlockLocation[] blockLocations = file.getBlockLocations();//获取文件分块信息
            System.out.println(Arrays.toString(blockLocations));

        }

        //4.释放资源
        if (fileSystem != null) {
            fileSystem.close();
        }
    }

}
